package cfg

import (
	"github.com/BurntSushi/toml"
	"github.com/nacos-group/nacos-sdk-go/clients/config_client"
	"github.com/nacos-group/nacos-sdk-go/vo"
	"gopkg.in/yaml.v3"
	"path/filepath"
	"strings"
)

type NacosBase struct {
	ConfigClient config_client.IConfigClient
	GroupId      string
	DataId       string
}

// NewNacosData get a cfg handler by toml string content
// nacos目前没有toml支持，暂时统一使用yaml格式
func NewNacos(baseInfo *NacosBase) *Handler {
	if baseInfo == nil || baseInfo.ConfigClient == nil {
		panic("not found nacos base config information")
	}

	if baseInfo.GroupId == "" || baseInfo.DataId == "" {
		panic("not found nacos GroupId or DataId")
	}
	confFileType := strings.Trim(filepath.Ext(baseInfo.DataId), ".")

	handler := Handler{ConfType: confFileType, Source: "nacos"}
	content, err := baseInfo.ConfigClient.GetConfig(vo.ConfigParam{
		DataId: baseInfo.DataId,
		Group:  baseInfo.GroupId})

	if err != nil {
		panic("nocos config content get error:" + err.Error())
	}

	switch confFileType {
	case "toml":
		if _, err := toml.Decode(content, &handler.confInfo); err != nil {
			panic(err)
		}
	case "yml", "yaml":
		if err := yaml.Unmarshal([]byte(content), &handler.confInfo); err != nil {
			panic(err)
		}
	default:
		panic("can not support this type config file:" + confFileType)
	}
	return &handler
}
